package fr.generali.sas.service.flux;

import javax.xml.bind.JAXBElement;

import fr.generali.sas.model.v1_0.InfoClientResponse;
import fr.generali.sas.model.v1_0.NotificationIntegrationResponseType;


public interface FluxSynchroService {
	/**
	 * positionne des acquittements sur les flux pour signaler leur integration
	 * 
	 * @param codeIntermediaire
	 *            code de l'intermediaire
	 * @param numeroReservation
	 *            idenfiant de la demande (meme role qu'un numero de facture)
	 * @return le nombre de lignes acquittées
	 * @throws Exception
	 *             si l'accès au depot est impossible
	 * @throws IllegalArgumentException
	 *             si l'un des paramètres est null ou vide ou blanc
	 */
	public int acquitteSuccesIntegrationFlux(String codeIntermediaire, String numeroReservation) throws IllegalArgumentException, Exception;
	
	/**
	 * positionne des acquittements sur les flux pour signaler leur echec d'integration
	 * 
	 * @param codeIntermediaire
	 *            code de l'intermediaire
	 * @param numeroReservation
	 *            idenfiant de la demande (meme role qu'un numero de facture)
	 * @return nombre de lignes acquittées
	 * @throws Exception
	 *             si l'accès au depot est impossible
	 * @throws IllegalArgumentException
	 *             si l'un des paramètres est null ou vide ou blanc
	 */
	public int acquitteEchecIntegrationFlux(String codeIntermediaire, String numeroReservation) throws IllegalArgumentException, Exception;
	
	/**
	 * @param codeIntermediaire
	 * @return
	 * @throws IllegalArgumentException
	 * @throws Exception
	 */
	public JAXBElement<InfoClientResponse> makeRecupererAgenceResponse(String codeIntermediaire) throws IllegalArgumentException, Exception;
	
	
	/**
	 * @param codeIntermediaire
	 * @param idClient
	 * @return
	 * @throws IllegalArgumentException
	 * @throws Exception
	 */
	public JAXBElement<InfoClientResponse> makeRecupererClientResponse(String codeIntermediaire, String idClient ) throws IllegalArgumentException, Exception;
	
	/**
	 * @param codeIntermediaire
	 * @param numeroReservation
	 * @param fromId
	 * @return
	 * @throws IllegalArgumentException
	 * @throws Exception
	 */
	public JAXBElement<InfoClientResponse> makePoursuivreResponse(String codeIntermediaire, String numeroReservation, String fromId) throws IllegalArgumentException, Exception;
	
	/**
	 * @param codeIntermediaire
	 * @param numeroReservation
	 * @param nbFlux
	 * @param success 
	 * @return
	 * @throws IllegalArgumentException
	 * @throws Exception
	 */
	public JAXBElement<NotificationIntegrationResponseType> makeNotificationIntegrationResponse(String codeIntermediaire, String numeroReservation, int nbFlux, boolean success) throws IllegalArgumentException, Exception;
	

}
